/**
 * 时间格式化工具函数
 * 将时间戳或ISO时间字符串格式化为相对时间显示
 */

/**
 * 格式化相对时间
 * @param {string|number|Date} time - 时间戳、ISO时间字符串或Date对象
 * @returns {string} 格式化后的时间字符串
 */
export function formatRelativeTime(time) {
  // 处理不同类型的时间输入
  let targetTime;
  
  if (typeof time === 'string') {
    // ISO时间字符串
    targetTime = new Date(time);
  } else if (typeof time === 'number') {
    // 检测时间戳格式：如果小于13位数字，认为是秒级时间戳
    if (time.toString().length <= 10) {
      // 秒级时间戳，转换为毫秒
      targetTime = new Date(time * 1000);
    } else {
      // 毫秒级时间戳
      targetTime = new Date(time);
    }
  } else if (time instanceof Date) {
    // Date对象
    targetTime = time;
  } else {
    return '无效时间';
  }
  
  // 检查时间是否有效
  if (isNaN(targetTime.getTime())) {
    return '无效时间';
  }
  
  const now = new Date();
  const diffMs = now.getTime() - targetTime.getTime();
  
  // 如果是未来时间，返回具体日期
  if (diffMs < 0) {
    return formatAbsoluteDate(targetTime);
  }
  
  const diffSeconds = Math.floor(diffMs / 1000);
  const diffMinutes = Math.floor(diffSeconds / 60);
  const diffHours = Math.floor(diffMinutes / 60);
  const diffDays = Math.floor(diffHours / 24);
  
  // 小于1分钟
  if (diffMinutes < 1) {
    return '刚刚';
  }
  
  // 小于1小时
  if (diffMinutes < 60) {
    return `${diffMinutes}分钟前`;
  }
  
  // 小于1天
  if (diffHours < 24) {
    return `${diffHours}小时前`;
  }
  
  // 小于30天
  if (diffDays < 30) {
    return `${diffDays}天前`;
  }
  
  // 超过30天，显示具体日期
  return formatAbsoluteDate(targetTime);
}

/**
 * 格式化绝对日期
 * @param {Date} date - Date对象
 * @returns {string} 格式化后的日期字符串
 */
function formatAbsoluteDate(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  
  const currentYear = new Date().getFullYear();
  
  // 如果是当年，不显示年份
  if (year === currentYear) {
    return `${month}-${day} ${hours}:${minutes}`;
  }
  
  // 不是当年，显示完整日期
  return `${year}-${month}-${day} ${hours}:${minutes}`;
}

// 默认导出
export default {
  formatRelativeTime
};